package com.jiuwei.androidbasemodel.network

import retrofit2.http.*
import retrofit2.Response

/**
 * API服务接口
 * 
 * 定义了与后端API交互的各种网络请求方法
 * 这只是一个示例接口，实际使用时需要根据具体的API文档进行修改
 */
interface ApiService {
    
    /**
     * GET请求示例 - 获取用户信息
     * @param userId 用户ID
     * @return 用户信息响应
     */
    @GET("users/{userId}")
    suspend fun getUser(@Path("userId") userId: String): Response<UserResponse>
    
    /**
     * GET请求示例 - 带查询参数
     * @param page 页码
     * @param pageSize 每页数量
     * @return 用户列表响应
     */
    @GET("users")
    suspend fun getUsers(
        @Query("page") page: Int,
        @Query("page_size") pageSize: Int
    ): Response<List<UserResponse>>
    
    /**
     * POST请求示例 - 创建用户
     * @param user 用户信息
     * @return 创建结果响应
     */
    @POST("users")
    suspend fun createUser(@Body user: UserRequest): Response<UserResponse>
    
    /**
     * PUT请求示例 - 更新用户信息
     * @param userId 用户ID
     * @param user 更新的用户信息
     * @return 更新结果响应
     */
    @PUT("users/{userId}")
    suspend fun updateUser(
        @Path("userId") userId: String,
        @Body user: UserRequest
    ): Response<UserResponse>
    
    /**
     * DELETE请求示例 - 删除用户
     * @param userId 用户ID
     * @return 删除结果响应
     */
    @DELETE("users/{userId}")
    suspend fun deleteUser(@Path("userId") userId: String): Response<Unit>
    
    /**
     * 表单提交示例
     * @param name 姓名
     * @param email 邮箱
     * @return 提交结果响应
     */
    @FormUrlEncoded
    @POST("form")
    suspend fun submitForm(
        @Field("name") name: String,
        @Field("email") email: String
    ): Response<FormResponse>
    
    /**
     * 文件上传示例
     * @param file 文件
     * @param description 文件描述
     * @return 上传结果响应
     */
    @Multipart
    @POST("upload")
    suspend fun uploadFile(
        @Part("file") file: okhttp3.MultipartBody.Part,
        @Part("description") description: okhttp3.RequestBody
    ): Response<UploadResponse>
}

/**
 * 用户请求数据模型
 */
data class UserRequest(
    val name: String,
    val email: String,
    val age: Int
)

/**
 * 用户响应数据模型
 */
data class UserResponse(
    val id: String,
    val name: String,
    val email: String,
    val age: Int,
    val createdAt: String
)

/**
 * 表单响应数据模型
 */
data class FormResponse(
    val success: Boolean,
    val message: String
)

/**
 * 上传响应数据模型
 */
data class UploadResponse(
    val fileUrl: String,
    val fileName: String,
    val fileSize: Long
)